from typing import Optional
import redis
from app.core.config import settings

class RedisClient:
    """Redis客户端类
    
    封装Redis操作，提供简化的接口用于缓存数据
    基于redis-py库实现
    """
    def __init__(self):
        """初始化Redis连接池和客户端
        
        根据配置创建Redis连接池和客户端实例
        """
        self.pool = redis.ConnectionPool(
            host=settings.REDIS_HOST,
            port=settings.REDIS_PORT,
            db=settings.REDIS_DB,
            password=settings.REDIS_PASSWORD,
            decode_responses=True  # 自动将字节解码为字符串
        )
        self.client = redis.Redis(connection_pool=self.pool)

    def get(self, key: str) -> Optional[str]:
        """获取键值
        
        Args:
            key: 键名
            
        Returns:
            Optional[str]: 键对应的值，如果键不存在则返回None
        """
        return self.client.get(key)

    def set(self, key: str, value: str, expire: int = None) -> bool:
        """设置键值
        
        Args:
            key: 键名
            value: 值
            expire: 过期时间（秒），如不设置则永不过期
            
        Returns:
            bool: 操作是否成功
        """
        return self.client.set(key, value, ex=expire)

    def delete(self, key: str) -> bool:
        """删除键
        
        Args:
            key: 键名
            
        Returns:
            bool: 操作是否成功
        """
        return bool(self.client.delete(key))

    def exists(self, key: str) -> bool:
        """检查键是否存在
        
        Args:
            key: 键名
            
        Returns:
            bool: 键是否存在
        """
        return bool(self.client.exists(key))

    def close(self) -> None:
        """关闭Redis连接
        
        释放连接资源
        """
        self.client.close()

# 创建全局Redis客户端实例
redis_client = RedisClient()